package com.loong.android.tools;

import android.text.TextUtils;
import android.util.Xml;
import org.xmlpull.v1.XmlSerializer;
import java.io.ByteArrayOutputStream;
import java.io.IOException;

/**
 * XmlSerializer生成xml文档
 */
public class XmlMaker {

    private XmlSerializer mWriteXml;
    private ByteArrayOutputStream outputStream;

    /**
     * 返回操作的org.xmlpull.v1.XmlSerializer对象
     */
    public XmlSerializer getXmlSerializer() {
        return mWriteXml;
    }

    /**
     * 返回操作的java.io.ByteArrayOutputStream对象
     */
    public ByteArrayOutputStream getByteArrayOutputStream() {
        return outputStream;
    }

    /**
     * 开始合成xml
     * @param encoding 插入XML文档的编码,一般为 "UTF-8" 或 "GBK" 等，默认为"UTF-8"
     */
    public boolean begin(String encoding) {
        if (TextUtils.isEmpty(encoding)) return false;
        mWriteXml = Xml.newSerializer();
        outputStream = new ByteArrayOutputStream();
        try {
            mWriteXml.setOutput(outputStream, encoding);
            mWriteXml.startDocument(encoding, true);
            return true;
        } catch (IOException e) {
            e.printStackTrace();
            return false;
        }
    }

    public boolean begin() {
        return begin("UTF-8");
    }

    /**
     * 插入开始标签
     * @param namespace 命名空间
     * @param name 标签名称
     */
    public void startTag(String namespace, String name) {
        try {
            mWriteXml.startTag(namespace, name);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 插入结束标签
     * @param namespace 命名空间
     * @param name 标签名称
     */
    public void endTag(String namespace, String name) {
        try {
            mWriteXml.endTag(namespace, name);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 插入属性
     * @param namespace 命名空间
     * @param name 属性名称
     * @param value 属性值
     */
    public void attribute(String namespace, String name, String value) {
        try {
            mWriteXml.attribute(null, name, value);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 插入文本内容
     * @param content 内容
     */
    public void text(String content) {
        try {
            mWriteXml.text(content);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 插入注释内容
     * @param content 内容
     */
    public void comment(String content) {
        try {
            mWriteXml.comment(content);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public void cdsect(String content) {
        try {
            mWriteXml.cdsect(content);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 插入文档声明
     * @param content 内容
     */
    public void docdecl(String content) {
        try {
            mWriteXml.docdecl(content);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 插入实体
     * @param content 内容
     */
    public void entityRef(String content) {
        try {
            mWriteXml.entityRef(content);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 完成文档合成，返回文档内容
     */
    public String complete() {
        try {
            mWriteXml.endDocument();
            outputStream.flush();
            outputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return outputStream.toString();
    }
}
